package leetcode.editor.cn.q1_300.q250;
//给定一个非负整数 num，反复将各个位上的数字相加，直到结果为一位数。返回这个结果。 
//
// 
//
// 示例 1: 
//
// 
//输入: num = 38
//输出: 2 
//解释: 各位相加的过程为：
//38 --> 3 + 8 --> 11
//11 --> 1 + 1 --> 2
//由于 2 是一位数，所以返回 2。
// 
//
// 示例 2: 
//
// 
//输入: num = 0
//输出: 0 
//
// 
//
// 提示： 
//
// 
// 0 <= num <= 2³¹ - 1 
// 
//
// 
//
// 进阶：你可以不使用循环或者递归，在 O(1) 时间复杂度内解决这个问题吗？ 
//
// 👍 598 👎 0

/**
 * 这个看了官方的解之后的突然想到能用打表法实现，直接调用 Q258_AddDigits1 中写好的算法总结规律
 * <p>
 * 规律为：除了 0 之外，所有的结果都是 1-9 的循环
 */
public class Q258_AddDigits {
    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int addDigits(int num) {
            if (num == 0) {
                return 0;
            }
            if (num % 9 == 0) {
                return 9;
            }

            return num % 9;
        }
    }
    //leetcode submit region end(Prohibit modification and deletion)


    public static void main(String[] args) {
        Q258_AddDigits1.Solution solution1 = new Q258_AddDigits1().new Solution();
        Solution solution2 = new Q258_AddDigits().new Solution();
        // TO TEST
        for (int i = 0; i < 1000; i++) {
            if (solution2.addDigits(i) != solution1.addDigits(i)) {
                System.out.println(i + "\t" + solution1.addDigits(i) + "\t" + solution2.addDigits(i));
            }
        }

    }
}